<
コンテンツ

パッケージとプラグインの開発

コンテンツ

パッケージの紹介

パッケージを使用すると、簡単に共有できるモジュール式コードを作成できます。 最小限のパッケージは次のもので構成されます。

pubspec.yaml
パッケージ名を宣言するメタデータ ファイル、 バージョン、作成者など。
lib
libディレクトリにはパブリック コードが含まれています パッケージ、少なくとも単一の<package-name>.dartファイル。

パッケージの種類

パッケージには複数の種類のコンテンツを含めることができます。

ダーツパッケージ
Dart で書かれた一般的なパッケージ、 たとえば、pathパッケージ。 これらの一部には Flutter 固有のものが含まれる可能性があります 機能があるため、 Flutter フレームワークは、その使用を Flutter のみに制限します。 たとえば、fluroパッケージ。
プラグインパッケージ
で書かれた API を含む特殊な Dart パッケージ Dart コードと 1 つ以上のプラットフォーム固有の組み合わせ 実装。

Android 用のプラグイン パッケージを作成できる (Kotlin または Java を使用)、iOS (Swift または Objective-C を使用)、 Web、macOS、Windows、Linux、または任意の組み合わせ その。

具体的な例としては、url_launcherプラグインパッケージ。 の使用方法を確認するには、url_launcherパッケージとその方法 Web のサポートを実装するために拡張されました。 Harry Terkelsen による Medium の記事を参照してください。Flutter Web プラグインの作成方法、パート 1。

FFI プラグイン パッケージ
で書かれた API を含む特殊な Dart パッケージ Dart コードと 1 つ以上のプラットフォーム固有の組み合わせ Dart FFI() を使用する実装アンドロイドiOSマックOS)。

Dart パッケージの開発

次の手順では、Flutter の作成方法を説明します。 パッケージ。

ステップ 1: パッケージを作成する

スターター Flutter パッケージを作成するには、 使用--template=packageフラグ付きflutter create:

$ flutter create --template=package hello

これにより、パッケージプロジェクトが作成されますhello次の内容を含むフォルダー:

ライセンス
(ほとんどが) 空のライセンス テキスト ファイル。
テスト/hello_test.dart
単体テストパッケージ用。
こんにちは。iml
IntelliJ IDE によって使用される構成ファイル。
.gitignore
Git にどのファイルまたは プロジェクト内で無視するフォルダー。
.metadata
IDE がプロパティを追跡するために使用する隠しファイル Flutter プロジェクトの。
pubspec.yaml
を指定するメタデータを含む yaml ファイル パッケージの依存関係。パブツールによって使用されます。
README.md
簡単に説明したスターター マークダウン ファイル パッケージの目的。
lib/hello.dart
パッケージの Dart コードを含むスターター アプリ。
.idea/modules.xml.idea/workspace.xml
設定ファイルを含む隠しフォルダー IntelliJ IDE の場合。
変更ログ.md
追跡用の(ほとんど)空のマークダウン ファイル パッケージのバージョンが変更されます。

ステップ 2: パッケージを実装する

純粋な Dart パッケージの場合は、機能を追加するだけです メインの中のlib/<package name>.dartファイル、 または、libディレクトリ。

パッケージをテストするには、以下を追加します単体テストtestディレクトリ。

整理方法の詳細については、 パッケージ内容、 を参照してくださいダーツライブラリパッケージドキュメンテーション。

プラグインパッケージの開発

を呼び出すパッケージを開発したい場合は、 プラットフォーム固有の API、 プラグインパッケージを開発する必要があります。

API はプラットフォーム固有の を使用した実装プラットフォームチャンネル

フェデレーションプラグイン

フェデレーテッド プラグインは、サポートを分割する方法です。 異なるプラットフォームを個別のパッケージに分割します。 したがって、フェデレーション プラグインは iOS に対して 1 つのパッケージを使用できます。 Android 用、Web 用、 もう 1 つは自動車用です (IoT デバイスの例として)。 このアプローチには他の利点もありますが、特に、ドメインの専門家が 既存のプラグインを拡張して、彼らが最もよく知っているプラ​​ットフォームで動作するようにします。

フェデレーション プラグインには次のパッケージが必要です。

アプリ向けパッケージ
プラグイン ユーザーがプラグインを使用するために依存するパッケージ。 このパッケージは、Flutter アプリで使用される API を指定します。
プラットフォーム パッケージ
プラットフォーム固有のコンポーネントを含む 1 つ以上のパッケージ 実装コード。アプリ向けパッケージは以下を呼び出します これらのパッケージはアプリには含まれていません。 プラットフォーム固有の機能が含まれていない限り エンドユーザーがアクセスできるようになります。
プラットフォームインターフェースパッケージ
アプリ向けパッケージを接着するパッケージ プラットフォーム パッケージに追加します。このパッケージは、 プラットフォーム パッケージが実装する必要があるインターフェイス アプリ向けパッケージをサポートします。単一のパッケージを持つ このインターフェイスを定義すると、すべてのプラットフォームが パッケージは同じ機能を統一された方法で実装します。

承認されたフェデレーション プラグイン

理想的には、プラットフォーム実装を追加する場合、 統合プラグインの場合は、パッケージと調整します 作成者に実装を含めてください。 このように、原作者は、支持するあなたの 実装。

たとえば、次のように書いたとします。foobar_windows(想像上の) の実装foobarプラグイン。 承認されたプラグインでは、オリジナルfoobar著者 Windows 実装を依存関係として追加します アプリ向けパッケージの pubspec 内。 次に、開発者がfoobarプラグイン Flutter アプリ、Windows 実装では、 他の承認された実装と同様に、 アプリで自動的に利用可能になります。

非承認のフェデレーション プラグイン

何らかの理由で実装を取得できない場合 元のプラグイン作成者によって追加され、その後プラグインが追加されます はいいえ支持されました。開発者は引き続き使用できます 実装しますが、プラグインを手動で追加する必要があります アプリの pubspec ファイルに。そこで、開発者は、 両方を含める必要がありますfoobar依存foobar_windows達成するための依存 完全な機能。

フェデレーション プラグインの詳細については、 なぜそれが役立つのか、またどのように役立つのか 実装されました。Harry Terkelsen による Medium の記事を参照してください。Flutter Web プラグインの作成方法、パート 2。

プラグインがサポートするプラットフォームの指定

プラグインは、サポートするプラットフォームを指定できます。 にキーを追加するplatformsの地図pubspec.yamlファイル。例えば、 次の pubspec ファイルは、flutter:の地図helloプラグイン、 iOS と Android のみをサポートします。

flutter:
  plugin:
    platforms:
      android:
        package: com.example.hello
        pluginClass: HelloPlugin
      ios:
        pluginClass: HelloPlugin

より多くのプラットフォームにプラグイン実装を追加する場合、 のplatformsそれに応じてマップを更新する必要があります。 たとえば、pubspec ファイル内のマップは次のとおりです。 のためにhelloプラグイン、 macOS と Web のサポートを追加するために更新された場合:

flutter:
  plugin:
    platforms:
      android:
        package: com.example.hello
        pluginClass: HelloPlugin
      ios:
        pluginClass: HelloPlugin
      macos:
        pluginClass: HelloPlugin
      web:
        pluginClass: HelloPlugin
        fileName: hello_web.dart

フェデレーテッド プラットフォーム パッケージ

プラットフォーム パッケージは同じ形式を使用します。 が含まれますimplementsを示すエントリ どのアプリ向けパッケージを実装するか。例えば、 あるhello_windowsWindows を含むプラグイン の実装hello次のようになりますflutter:地図:

flutter:
  plugin:
    implements: hello
    platforms:
      windows:
        pluginClass: HelloPlugin

承認された実装

アプリ向けパッケージは、 それに依存し、それをdefault_packageの中にplatforms:地図。もしhello上記のプラグインが承認されていますhello_windows、 それは次のようになります:

flutter:
  plugin:
    platforms:
      android:
        package: com.example.hello
        pluginClass: HelloPlugin
      ios:
        pluginClass: HelloPlugin
      windows:
        default_package: hello_windows

dependencies:
  hello_windows: ^1.0.0

ここに示すように、アプリ向けパッケージには次のものを含めることができることに注意してください。 パッケージ内に実装されている一部のプラットフォーム、 およびその他の承認されたフェデレーション実装。

iOS と macOS の共有実装

多くのフレームワークは、iOS と macOS の両方を同一の機能でサポートしています。 またはほとんど同一の API を実装できるようになります。 同じコードベースを持つ iOS と macOS の両方に対応するいくつかのプラグイン。 通常、各プラットフォームの実装は独自に行われます。 フォルダですが、sharedDarwinSourceオプションで iOS が許可されます と macOS では代わりに同じフォルダーを使用します。

flutter:
  plugin:
    platforms:
      ios:
        pluginClass: HelloPlugin
        sharedDarwinSource: true
      macos:
        pluginClass: HelloPlugin
        sharedDarwinSource: true

environment:
  sdk: ^3.0.0
  # Flutter versions prior to 3.7 did not support the
  # sharedDarwinSource option.
  flutter: ">=3.7.0"

いつsharedDarwinSourceの代わりに有効になります のiosiOS のディレクトリとmacosディレクトリ macOS の場合、両方のプラットフォームで共有darwinすべてのコードとリソースのディレクトリ。有効にする場合 このオプションを使用するには、既存のファイルを移動する必要があります からiosmacos共有ディレクトリにコピーします。あなた podspec ファイルを更新して、 両方のプラットフォームの依存関係と展開ターゲット、 例えば:

  s.ios.dependency 'Flutter'
  s.osx.dependency 'FlutterMacOS'
  s.ios.deployment_target = '11.0'
  s.osx.deployment_target = '10.14'

ステップ 1: パッケージを作成する

プラグイン パッケージを作成するには、--template=pluginフラグ付きflutter create

使用--platforms=オプションの後に プラットフォームを指定するカンマ区切りのリスト プラグインがサポートしていること。利用可能なプラットフォームは次のとおりです。androidiosweblinuxmacos、 とwindows。 プラットフォームが指定されていない場合、 結果のプロジェクトはどのプラットフォームもサポートしません。

使用--org組織を指定するオプション、 逆ドメイン名表記を使用します。この値が使用されます さまざまなパッケージおよびバンドル識別子で 生成されたプラグインコード。

使用-aAndroidの言語を指定するオプション または-iiOS の言語を指定するオプション。 選んでください次のいずれか:

$ flutter create --org com.example --template=plugin --platforms=android,ios,linux,macos,windows -a kotlin hello
$ flutter create --org com.example --template=plugin --platforms=android,ios,linux,macos,windows -a java hello
$ flutter create --org com.example --template=plugin --platforms=android,ios,linux,macos,windows -i objc hello
$ flutter create --org com.example --template=plugin --platforms=android,ios,linux,macos,windows -i swift hello

これにより、次の場所にプラグイン プロジェクトが作成されます。helloフォルダ 次のような専門的な内容が含まれます。

lib/hello.dart
プラグインの Dart API。
android/src/main/java/com/example/hello/HelloPlugin.kt
Android プラットフォーム固有のプラグイン API の実装 コトリンで。
ios/Classes/HelloPlugin.m
iOS プラットフォーム固有のプラグイン API の実装 Objective-C で。
example/
プラグインに依存する Flutter アプリ、 そしてその使用方法を説明します。

デフォルトでは、プラグイン プロジェクトは iOS コード用の Swift を使用し、 Android コード用の Kotlin。 Objective-C または Java をお好みの場合は、 次を使用して iOS 言語を指定できます-iそしてその Android 言語を使用する-a。例えば:

$ flutter create --template=plugin --platforms=android,ios -i objc hello
$ flutter create --template=plugin --platforms=android,ios -a java hello

ステップ 2: パッケージを実装する

プラグイン パッケージには複数のプラットフォーム用のコードが含まれています いくつかのプログラミング言語で書かれており、 スムーズなエクスペリエンスを確保するには、いくつかの特定の手順が必要です。

ステップ 2a: パッケージ API (.dart) を定義する

プラグイン パッケージの API は Dart コードで定義されます。 メインを開くhello/お気に入りのフォルダー flutterエディター。 ファイルを見つけますlib/hello.dart

ステップ 2b: Android プラットフォーム コード (.kt/.java) を追加する

Android Studio を使用して Android コードを編集することをお勧めします。

次に、次の手順を実行します。

  1. Android Studioを起動します。
  2. 選択する既存の Android Studio プロジェクトを開くの中にAndroid Studio へようこそダイアログ、 または選択しますファイル > 開くメニューから、 そして、hello/example/android/build.gradleファイル。
  3. の中にグラドル同期ダイアログ、選択OK
  4. の中にAndroid Gradle プラグインのアップデートダイアログ、 選択するこのプロジェクトについてはもう通知しないでください

プラグインの Android プラットフォーム コードは次の場所にあります。hello/java/com.example.hello/HelloPlugin

Android Studio からサンプル アプリを実行するには、次のようにします。 実行(▶)ボタンを押します。

ステップ 2c: iOS プラットフォーム コード (.swift/.h+.m) を追加します。

Xcode を使用して iOS コードを編集することをお勧めします。

Xcode で iOS プラットフォーム コードを編集する前に、 まず、コードが少なくとも 1 回ビルドされていることを確認してください (つまり、IDE/エディタからサンプル アプリを実行します。 またはターミナルで実行しますcd hello/example; flutter build ios --no-codesign)。

次に、次の手順を実行します。

  1. Xcodeを起動します。
  2. 選択するファイル > 開くを選択し、hello/example/ios/Runner.xcworkspaceファイル。

プラグインの iOS プラットフォーム コードは次の場所にあります。Pods/Development Pods/hello/../../example/ios/.symlinks/plugins/hello/ios/Classesプロジェクトナビゲータで。 (使用している場合sharedDarwinSource、 パスは次で終わりますhello/darwin/Classesその代わり。)

実行 (▶) ボタンを押すと、サンプル アプリを実行できます。

ステップ 2d: Linux プラットフォーム コード (.h+.cc) を追加する

IDE を使用して Linux コードを編集することをお勧めします。 C++ の統合。以下の手順は次のとおりです。 「C/C++」および「CMake」拡張機能を備えた Visual Studio Code インストールされていますが、他の IDE 用に調整できます。

IDE で Linux プラットフォーム コードを編集する前に、 まず、コードが少なくとも 1 回ビルドされていることを確認してください (つまり、Flutter からサンプル アプリを実行します) IDE/エディタ、またはターミナルで実行cd hello/example; flutter build linux)。

次に、次の手順を実行します。

  1. Visual Studio コードを起動します。
  2. を開きますhello/example/linux/ディレクトリ。
  3. 選ぶはいプロンプトで次のように尋ねます。Would you like to configure project "linux"?。 これにより、C++ オートコンプリートが機能するようになります。

プラグインの Linux プラットフォーム コードは次の場所にあります。flutter/ephemeral/.plugin_symlinks/hello/linux/

次を使用してサンプルアプリを実行できますflutter runノート:実行可能な Flutter アプリケーションの作成 Linux では、次の手順が必要です。flutterツールなので、エディターが CMake を提供している場合でも、 その方法で統合を構築して実行することはできません 正しく動作します。

ステップ 2e: macOS プラットフォーム コード (.swift) を追加する

Xcode を使用して macOS コードを編集することをお勧めします。

Xcode で macOS プラットフォーム コードを編集する前に、 まず、コードが少なくとも 1 回ビルドされていることを確認してください (つまり、IDE/エディタからサンプル アプリを実行します。 またはターミナルで実行しますcd hello/example; flutter build macos)。

次に、次の手順を実行します。

  1. Xcodeを起動します。
  2. 選択するファイル > 開くを選択し、hello/example/macos/Runner.xcworkspaceファイル。

プラグインの macOS プラットフォーム コードは次の場所にあります。Pods/Development Pods/hello/../../example/macos/Flutter/ephemeral/.symlinks/plugins/hello/macos/Classesプロジェクトナビゲータで。 (使用している場合sharedDarwinSource、 パスは次で終わりますhello/darwin/Classesその代わり。)

実行 (▶) ボタンを押すと、サンプル アプリを実行できます。

ステップ 2f: Windows プラットフォーム コード (.h+.cpp) を追加します。

Visual Studio を使用して Windows コードを編集することをお勧めします。

Visual Studio で Windows プラットフォーム コードを編集する前に、 まず、コードが少なくとも 1 回ビルドされていることを確認してください (つまり、IDE/エディタからサンプル アプリを実行します。 またはターミナルで実行しますcd hello/example; flutter build windows)。

次に、次の手順を実行します。

  1. Visual Studio を起動します。
  2. 選択するプロジェクトまたはソリューションを開くを選択し、hello/example/build/windows/hello_example.slnファイル。

プラグインの Windows プラットフォーム コードは次の場所にあります。hello_plugin/Source Fileshello_plugin/Header Filesの ソリューション エクスプローラー。

右クリックしてサンプル アプリを実行できます。hello_exampleの ソリューション エクスプローラーと選択スタートアッププロジェクトとして設定、 実行(▶)ボタンを押します。重要:後 プラグインコードに変更を加える場合は、選択する必要がありますビルド > ソリューションのビルド再度実行する前、そうでない場合 代わりに、ビルドされたプラグインの古いコピーが実行されます 変更を含む最新バージョンの。

ステップ 2g: API とプラットフォーム コードを接続する

最後に、Dart コードで書かれた API を次のように接続する必要があります。 プラットフォーム固有の実装。 これは、プラットフォームチャンネル、 またはプラットフォームで定義されたインターフェイスを通じて インターフェースパッケージ。

既存のプラグイン プロジェクトにプラットフォームのサポートを追加する

特定のプラットフォームのサポートを 既存のプラグインプロジェクト、実行flutter createと の--template=pluginプロジェクトディレクトリに再度フラグを立てます。 たとえば、既存のプラグインに Web サポートを追加するには、次を実行します。

$ flutter create --template=plugin --platforms=web .

このコマンドで更新に関するメッセージが表示された場合は、pubspec.yamlファイルを作成するには、提供される指示に従ってください。

Dart プラットフォームの実装

多くの場合、非 Web プラットフォームの実装では、 上に示したように、プラットフォーム固有の実装言語。しかし、 プラットフォーム実装では、プラットフォーム固有の Dart も使用できます。

Dart 専用プラットフォームの実装

場合によっては、一部のプラットフォームでは、 完全に Dart で実装されます (たとえば、FFI を使用)。 Web 以外のプラットフォームでの Dart 専用プラットフォームの実装の場合、 を交換してくださいpluginClasspubspec.yaml でdartPluginClass。 ここにありますhello_windows上記の例は、 Dart のみの実装:

flutter:
  plugin:
    implements: hello
    platforms:
      windows:
        dartPluginClass: HelloPluginWindows

このバージョンでは、C++ Windows コードはなく、代わりに をサブクラス化するhelloプラグインの Dart プラットフォーム インターフェイス クラスとHelloPluginWindows静的を含むクラスregisterWith()方法。このメソッドは起動時に呼び出されます。 Dart 実装の登録に使用できます。

class HelloPluginWindows extends HelloPluginPlatform {
  /// Registers this class as the default instance of [HelloPluginPlatform].
  static void registerWith() {
    HelloPluginPlatform.instance = HelloPluginWindows();
  }

ハイブリッド プラットフォームの実装

プラットフォームの実装では、Dart とプラットフォーム固有の 言語。たとえば、プラグインは別のプラットフォーム チャネルを使用できます。 プラットフォームごとにチャネルをカスタマイズできるようにします。

ハイブリッド実装では両方の登録システムを使用します 上で説明した。ここにありますhello_windows上記の例は、 ハイブリッド実装:

flutter:
  plugin:
    implements: hello
    platforms:
      windows:
        dartPluginClass: HelloPluginWindows
        pluginClass: HelloPlugin

ダーツHelloPluginWindowsクラスはregisterWith()上では Dart のみの実装を示していますが、C++ ではHelloPluginclass は C++ のみの実装と同じになります。

プラグインをテストする

自動テストを使用してプラグインをテストすることをお勧めします 機能が後退しないようにするため コードに変更を加えたとき。

プラグインのテストについて詳しくは、 チェックアウトプラグインのテスト。 Flutter アプリのテストを作成している場合 プラグインがクラッシュを引き起こしているため、 チェックアウトプラグインテストでの flutter

FFI プラグイン パッケージの開発

を使用してネイティブ API を呼び出すパッケージを開発したい場合は、 Dart の FFI では、FFI プラグイン パッケージを開発する必要があります。

FFI プラグイン パッケージと (非 FFI) プラグイン パッケージの両方をサポート ネイティブ コードをバンドルしますが、FFI プラグイン パッケージはサポートしません メソッド チャネルにはメソッド チャネル登録コードが含まれます。 両方のメソッド チャネルを使用するプラグインを実装する場合 および FFI の場合は、(非 FFI) プラグインを使用します。プラットフォームごとに選択できます FFI または (非 FFI) プラグインを使用します。

FFI プラグイン パッケージは Flutter 3.0 で導入されました。 古い Flutter バージョンを対象とする場合は、(FFI 以外の) プラグインを使用できます。

ステップ 1: パッケージを作成する

スターター FFI プラグイン パッケージを作成するには、 使用--template=plugin_ffiフラグ付きflutter create:

$ flutter create --template=plugin_ffi hello

これにより、FFI プラグイン プロジェクトが作成されます。hello次の特殊なコンテンツを含むフォルダー:

ライブラリ: プラグインの API を定義する Dart コード、 を使用してネイティブ コードを呼び出しますdart:ffi

送信元: ネイティブ ソース コード、およびCMakeLists.txtそのソースコードをダイナミックライブラリにビルドするためのファイル。

プラットフォームフォルダー(androidioswindows、など): ネイティブ コードをビルドしてバンドルするためのビルド ファイル プラットフォームアプリケーションを備えたライブラリ。

ステップ 2: ネイティブ コードの構築とバンドル

pubspec.yamlFFI プラグインを次のように指定します。

  plugin:
    platforms:
      some_platform:
        ffiPlugin: true

この構成はネイティブ ビルドを呼び出します さまざまなターゲット プラットフォームおよびバンドル向け これらの FFI プラグインを使用する Flutter アプリケーションのバイナリ。

これと組み合わせることができますdartPluginClass、 FFI が 統合プラグイン内の 1 つのプラットフォームの実装:

  plugin:
    implements: some_other_plugin
    platforms:
      some_platform:
        dartPluginClass: SomeClass
        ffiPlugin: true

プラグインには FFI チャネルとメソッド チャネルの両方を含めることができます。

  plugin:
    platforms:
      some_platform:
        pluginClass: SomeName
        ffiPlugin: true

FFI によって呼び出されるネイティブ ビルド システム (およびメソッド チャネル) プラグインは次のとおりです。

  • Android の場合: Gradle。ネイティブ ビルド用に Android NDK を呼び出します。
    • のドキュメントを参照してください。android/build.gradle
  • iOS および macOS の場合: Xcode、CocoaPods 経由。
    • のドキュメントを参照してください。ios/hello.podspec
    • のドキュメントを参照してください。macos/hello.podspec
  • Linux および Windows の場合: CMake。
    • のドキュメントを参照してください。linux/CMakeLists.txt
    • のドキュメントを参照してください。windows/CMakeLists.txt

ステップ 3: ネイティブ コードへのバインド

ネイティブ コードを使用するには、Dart のバインディングが必要です。

これらを手動で記述することを避けるために、ヘッダー ファイルから生成されます。 (src/hello.h) にpackage:ffigen。 次のコマンドを実行してバインディングを再生成します。

$  flutter pub run ffigen --config ffigen.yaml

ステップ 4: ネイティブ コードの呼び出し

非常に実行時間が短いネイティブ関数を直接実行できます。 任意のアイソレートから呼び出されます。 例については、を参照してください。sumlib/hello.dart

実行時間の長い関数は、ヘルパーを分離するフレーム落ちを避けるため flutterアプリケーション。 例については、を参照してください。sumAsynclib/hello.dart

ドキュメントの追加

次のドキュメントを追加することをお勧めします。 すべてのパッケージに:

  1. README.mdパッケージを紹介するファイル
  2. CHANGELOG.md各バージョンでの変更点を文書化したファイル
  3. LICENSEパッケージに適用される条件を含むファイル 認可されています
  4. すべてのパブリック API の API ドキュメント (詳細は以下を参照)

APIドキュメント

パッケージを公開すると、 API ドキュメントは自動的に生成され、 pub.dev/documentation に公開されます。 たとえば、次のドキュメントを参照してください。device_info

API ドキュメントをローカルで生成したい場合は、 開発マシンでは、次のコマンドを使用します。

  1. ディレクトリをパッケージの場所に変更します。

    cd ~/dev/mypackage
    
  2. ドキュメントツールに、 Flutter SDK が見つかります (反映するように次のコマンドを変更します) どこに置いたのか):

       export FLUTTER_ROOT=~/dev/flutter  # on macOS or Linux
    
       set FLUTTER_ROOT=~/dev/flutter     # on Windows
    
  3. を実行します。dart doc道具 (Flutter SDK の一部として含まれています):

       $FLUTTER_ROOT/bin/cache/dart-sdk/bin/dart doc   # on macOS or Linux
    
       %FLUTTER_ROOT%\bin\cache\dart-sdk\bin\dart doc  # on Windows
    

API ドキュメントの作成方法に関するヒントについては、次を参照してください。効果的な Dart ドキュメント。

LICENSE ファイルへのライセンスの追加

各 LICENSE ファイル内の個別のライセンス 80 個のハイフンで区切る必要があります ライン上で自分自身で。

LICENSE ファイルに複数のファイルが含まれている場合 コンポーネントライセンス、次に各コンポーネント ライセンスは、次の名前で始まる必要があります。 コンポーネントライセンスが適用されるパッケージ、 各パッケージ名をそれぞれの行に配置し、 と分割されたパッケージ名のリスト 実際のライセンステキストは空行で区切ります。 (パッケージの名前が一致する必要はありません。 パブパッケージ。たとえば、パッケージ自体に次のものが含まれる場合があります。 複数のサードパーティソースからのコード、 それぞれにライセンスを含める必要がある場合があります)。

次の例は、適切に構成されたライセンス ファイルを示しています。

package_1

<some license text>

--------------------------------------------------------------------------------
package_2

<some license text>

以下は、適切に構成されたライセンス ファイルの別の例です。

package_1

<some license text>

--------------------------------------------------------------------------------
package_1
package_2

<some license text>

以下は、適切に構成されていないライセンス ファイルの例です。

<some license text>

--------------------------------------------------------------------------------
<some license text>

不適切に構成されたライセンス ファイルの別の例:

package_1

<some license text>
--------------------------------------------------------------------------------
<some license text>

パッケージを公開する

パッケージを実装したら、次の場所で公開できます。パブ.dev他の開発者が簡単に使用できるようにします。

公開する前に、必ずご確認ください。pubspec.yamlREADME.md、 とCHANGELOG.mdファイルを確認するために 内容は完全かつ正確です。また、改善するには、 パッケージの品質と使いやすさ(そしてそれを実現するために) Flutter のお気に入りのステータスを達成する可能性が高くなります)、 次の項目を含めることを検討してください。

  • 多様なコード使用例
  • スクリーンショット、アニメーション GIF、またはビデオ
  • 対応するコード リポジトリへのリンク

次に、publish コマンドを実行します。dry-runモード すべてが分析に合格したかどうかを確認するには、次のようにします。

$ flutter pub publish --dry-run

次のステップは、pub.dev への公開です。 ただし、準備ができていることを確認してください。出版は永遠です:

$ flutter pub publish

公開の詳細については、ドキュメントの公開dart.dev で。

パッケージの相互依存関係の処理

パッケージを開発している場合helloそれはに依存します 別のパッケージによって公開されている Dart API を追加する必要があります そのパッケージをdependenciesあなたのセクションpubspec.yamlファイル。以下のコードは Dart API を作成します のurl_launcher利用可能なプラグインhello:

dependencies:
  url_launcher: ^5.0.0

いまなら可能ですimport 'package:url_launcher/url_launcher.dart'launch(someUrl)Dartコードの中でhello

これは、パッケージを含める方法と何ら変わりません。 Flutter アプリまたはその他の Dart プロジェクト。

しかし、もしhelloたまたまプラグインパッケージ プラットフォーム固有のコードにアクセスする必要がある によって公開されるプラットフォーム固有の APIurl_launcher、 適切な依存関係宣言を追加する必要もあります 以下に示すように、プラットフォーム固有のビルド ファイルに追加されます。

アンドロイド

次の例では、依存関係を設定します。url_launcherhello/android/build.gradle:

android {
    // lines skipped
    dependencies {
        compileOnly rootProject.findProject(":url_launcher")
    }
}

いまなら可能ですimport io.flutter.plugins.urllauncher.UrlLauncherPluginそしてアクセスしてくださいUrlLauncherPluginソースコード内のクラスhello/android/src

詳細については、build.gradleファイルについては、を参照してください。Gradle ドキュメントビルドスクリプトについて。

iOS

次の例では、依存関係を設定します。url_launcherhello/ios/hello.podspec:

Pod::Spec.new do |s|
  # lines skipped
  s.dependency 'url_launcher'

いまなら可能です#import "UrlLauncherPlugin.h"と にアクセスしますUrlLauncherPluginソースコード内のクラス でhello/ios/Classes

詳細については、.podspecファイルについては、を参照してください。CocoaPods のドキュメントそれらの上に。

ウェブ

すべての Web 依存関係は、pubspec.yaml他の Dart パッケージと同様に、ファイルを作成します。